import { Game } from "./Game";
import { SquareGroup } from "./SquareGroup";

/**
 * 方块的坐标
 */
export interface Point {
  readonly x: number;
  readonly y: number;
}

/**
 * 方块的显示和隐藏
 */
export interface IViewer {
  show(): void;
  remove(): void;
}

/**
 * 形状
 */
export type Shape = Point[];

/**
 * 方块可移动方向
 */
export enum MoveDirection {
  left,
  right,
  down,
}

/**
 * 游戏状态
 */
export enum GameStatus {
  init, // 未开始
  playing, // 进行中
  pause, // 暂停
  over, // 结束
}

export interface GameViewer {
  /**
   * 下个方块
   * @param teris 下一个方块对象
   */
  showNext(teris: SquareGroup): void;
  /**
   * 切换方块
   * @param teris 切换的方块对象
   */
  switch(teris: SquareGroup): void;

  /**
   * 完成游戏初始化
   * @param game
   */
  init(game: Game): void;
  /**
   * 显示分数
   * @param score
   */
  showScore(score: number): void;
  /**
   * 游戏暂停事件
   */
  onGamePause(): void;
  /**
   * 游戏开始事件
   */
  onGameStart(): void;
  /**
   * 游戏结束事件
   */
  onGameOver(): void;
}
